package atguigu.myrule;

import com.netflix.loadbalancer.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * ribbon负载均衡的核心算法 IRule 如果需要替换默认 （默认轮询）
 * 官网明确说明 替换负载均衡策略不能放在@ComponentScan的扫描路径下 否则会被所有的Ribbon使用
 * 需要在主启动类中加//@RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration=MySelfRule.class)
 * @auther zzyy
 * @create 2020-02-19 19:00
 */
@Configuration
public class MySelfRule {
    //修改ribbon的负载均衡策略
    @Bean
    public IRule myRule(){
        //https://blog.51cto.com/881206524/2145097
//        new RoundRobinRule();//轮询
//        new RetryRule();//在RoundRobinRule的基础上,增加了重试的机制.
//        new BestAvailableRule();//跳过熔断的服务,获取请求数最少的服务.通常与ServerListSubsetFilter一起使用.
//        new WeightedResponseTimeRule();//权重的方式挑选服务.服务实例响应时间越小的服务,则更容易被选中.如果服务实例响应的时间相差不大的,排在前面的服务实例更容易被选中.
//        new ZoneAvoidanceRule();//使用ZoneAvoidancePredicate和AvailabilityPredicate来判断是否选择某个server，前一个判断判定一个zone的运行性能是否可用，剔除不可用的zone（的所有server），AvailabilityPredicate用于过滤掉连接数过多的Server。
        return new RandomRule();//定义为随机
    }
}
